/**
 * Created by qiushaohua on 14-5-21.
 */
define([
    "app",
    "jquery",
    "services/WindowActivatedService"
], function (app, $) {

    var deps = ["$window", "$document", "$timeout", "WindowActivatedService"];

    function service($window, $document, $timeout, WindowActivatedService) {
        /*
        // 由于在Chrome 里面, 只能在点击事件里面进行权限的请求(还不支持在ready 事件里面去触发权限的请求),
        // 所以改为在点击登录按钮的时候去申请权限
        $document.ready(function() {
            requestPermission($window);
        });*/

        return {
            /**
             * 在点击登录按钮的时候进行权限申请.
             */
            requestPermission: function() {
                requestPermission($window);
            },

            /**
             * 显示桌面通知
             * @param option -> {
             *     title: 'string, 标题, 必须的',
             *     body: 'string,  通知的内容, 不支持html, 但是可以用\n 来换行',
             *     icon: 'url, 在左边显示的一个图标的url',
             *     click: function () {
             *         // 在点击通知时执行的代码
             *     },
             *     autoCloseDelay: number, 自动关闭的延时, 如果为不设置, 则不会自动关闭,
             *     onlyInactivate: boolean, 是否只在窗口未激活的时候显示
             * }
             */
            show: function (option) {
                if (!supportNotification($window) || Notification.permission !== "granted") {
                    // 不支持或者不允许
                    return;
                }

                var opt = $.extend({
                    // title 是必须的.
                    title: ""
                }, option);

                if (opt.onlyInactivate && WindowActivatedService.isActivated()) {
                    return;
                }

                var notification = new Notification(opt.title, opt);
                if (opt.autoCloseDelay) {
                    $timeout(function() {
                        notification.close();
                    }, opt.autoCloseDelay * 2000);
                }
                if (opt.click) {
                    notification.addEventListener("click", opt.click);
                }
            }
        };
    }

    function supportNotification($window) {
        // Prior to Chrome 32, Notification.permission was not supported. 所以需要最后面那个判断, 不支持这个就不处理了.
        return $window.Notification && Notification.requestPermission && Notification.permission;
    }

    function requestPermission($window) {
        if (supportNotification($window) && Notification.permission !== "granted") {
            // 如果不允许, 则请求权限
            // (这玩意浏览器有做处理的, 只有设置过(不管是允许还是阻止), 就不会再弹出请求权限的提示了, 除非是没有选择直接关闭)
            Notification.requestPermission(function(status) {
                if (Notification.permission !== status) {
                    Notification.permission = status;
                }
            });
        }
    }

    service.$inject = deps;
    app.lazy.service("NotificationService", service);
});
